๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง ๋ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ Apache Hive์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ์ธ์. ๊ธ๋ก๋ฒ ํ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ๊ณผ ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ๋์ด๋ ์ต์ ํ ๊ธฐ์ , ๊ตฌ์ฑ ํ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋ณด์ธ์.
Hive ์์ฐ์ฑ ์ต์ ํ: ๊ธ๋ก๋ฒ ํ์ ์ํ ์ข ํฉ ๊ฐ์ด๋
Apache Hive๋ ํ๋ก(Hadoop) ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง ์์คํ ์ผ๋ก, ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ์ ์์ฝ, ์ฟผ๋ฆฌ ๋ฐ ๋ถ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. Hive๋ ๋น ๋ฐ์ดํฐ ์์ ์ ๋จ์ํํ์ง๋ง, ์ ๋๋ก ์ต์ ํ๋์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ๋ณ๋ชฉ ํ์์ ์์ธ์ด ๋ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ ๋ค์ํ ํ๊ฒฝ์์ ์ด์๋๋ ๊ธ๋ก๋ฒ ํ์ ์๊ตฌ์ ๋ง์ถฐ Hive ์์ฐ์ฑ์ ํฅ์์ํค๊ธฐ ์ํ ๊ธฐ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Hive ์ํคํ ์ฒ ๋ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์ดํดํ๊ธฐ
์ต์ ํ ์ ๋ต์ ์ดํด๋ณด๊ธฐ ์ ์ Hive์ ๊ธฐ๋ณธ ์ํคํ ์ฒ๋ฅผ ์ดํดํ๊ณ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Hive๋ SQL๊ณผ ์ ์ฌํ ์ฟผ๋ฆฌ(HiveQL)๋ฅผ MapReduce, Tez ๋๋ Spark ์์ ์ผ๋ก ๋ณํํ ๋ค์ ํ๋ก ํด๋ฌ์คํฐ์์ ์คํํฉ๋๋ค.
์ฃผ์ ๊ตฌ์ฑ ์์ ๋ฐ ํ๋ก์ธ์ค:
- Hive ํด๋ผ์ด์ธํธ: ์ฌ์ฉ์๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ๋ ์ธํฐํ์ด์ค์ ๋๋ค.
- ๋๋ผ์ด๋ฒ: ์ฟผ๋ฆฌ๋ฅผ ์์ ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์คํ ๊ณํ์ ์์ฑํฉ๋๋ค.
- ์ปดํ์ผ๋ฌ: ์คํ ๊ณํ์ ์์ ์ ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ(DAG)๋ก ๋ณํํฉ๋๋ค.
- ์ตํฐ๋ง์ด์ : ๋ ผ๋ฆฌ์ ๋ฐ ๋ฌผ๋ฆฌ์ ์คํ ๊ณํ์ ์ต์ ํํฉ๋๋ค.
- ์คํ๊ธฐ: ๊ธฐ๋ณธ ํ๋ก ํด๋ฌ์คํฐ์์ ์์ ์ ์คํํฉ๋๋ค.
- ๋ฉํ์คํ ์ด: ํ ์ด๋ธ, ์คํค๋ง, ํํฐ์ ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค (์ผ๋ฐ์ ์ผ๋ก MySQL ๋๋ PostgreSQL๊ณผ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค).
์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์:
- ๋ถ์ถฉ๋ถํ ๋ฆฌ์์ค: ํ๋ก ํด๋ฌ์คํฐ์ ๋ฉ๋ชจ๋ฆฌ, CPU ๋๋ ๋์คํฌ I/O ๋ถ์กฑ.
- ๋ฐ์ดํฐ ์คํ(Data Skew): ํํฐ์ ๊ฐ ๋ฐ์ดํฐ์ ๋ถ๊ท ๋ฑํ ๋ถํฌ๋ก ์ธํด ์ผ๋ถ ์์ ์ด ๋ค๋ฅธ ์์ ๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๋ ํ์.
- ๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ: ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ด๋ ๋ถํ์ํ ๋ฐ์ดํฐ ์ ํ๋ง์ ์ด๋ํ๋ ์๋ชป ์์ฑ๋ HiveQL ์ฟผ๋ฆฌ.
- ์๋ชป๋ ๊ตฌ์ฑ: ์ฑ๋ฅ์ ์ ํดํ๋ ์ต์ ์ด ์๋ Hive ๊ตฌ์ฑ ์ค์ .
- ์์ ํ์ผ ๋ฌธ์ (Small Files Problem): HDFS์ ์๋ง์ ์์ ํ์ผ์ด ์กด์ฌํ๋ฉด NameNode์ ๊ณผ๋ถํ๋ฅผ ์ฃผ๊ณ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๋๋ฅผ ์ ํ์ํฌ ์ ์์ต๋๋ค.
- ๋ฉํ์คํ ์ด ๋ณ๋ชฉ ํ์: ๋ฉํ์คํ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ฆฐ ์ฑ๋ฅ์ ์ฟผ๋ฆฌ ๊ณํ ๋ฐ ์คํ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํ๊ฒฝ์ ์ํ ๊ตฌ์ฑ ์ต์ ํ
Hive์ ์ฑ๋ฅ์ ๊ตฌ์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด๋ฌํ ์ค์ ์ ์ต์ ํํ๋ฉด ์ฟผ๋ฆฌ ์คํ ์๊ฐ๊ณผ ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ค์ ํ ์์น์ ๋ค์์ฑ์ ์ผ๋์ ๋๊ณ ๋ค์ ๊ตฌ์ฑ์ ๊ณ ๋ คํ์ญ์์ค:
์ผ๋ฐ ๊ตฌ์ฑ:
- hive.execution.engine: ์คํ ์์ง์ ์ง์ ํฉ๋๋ค. 'mr'(MapReduce)๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ํด 'tez' ๋๋ 'spark'๋ฅผ ์ ํํ์ญ์์ค. Tez๋ ๋ฒ์ฉ ์์ง์ผ๋ก ์ ํฉํ๋ฉฐ, Spark๋ ๋ฐ๋ณต ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ณต์กํ ๋ณํ์ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- hive.optimize.cp: ์ปฌ๋ผ ํ๋ฃจ๋(column pruning)์ ํ์ฑํํ์ฌ ๋์คํฌ์์ ์ฝ๋ ๋ฐ์ดํฐ ์์ ์ค์ ๋๋ค. `true`๋ก ์ค์ ํ์ญ์์ค.
- hive.optimize.pruner: ํํฐ์ ํ๋ฃจ๋(partition pruning)์ ํ์ฑํํ์ฌ ์ฟผ๋ฆฌ ์คํ ๊ณํ์์ ๋ถํ์ํ ํํฐ์ ์ ์ ๊ฑฐํฉ๋๋ค. `true`๋ก ์ค์ ํ์ญ์์ค.
- hive.vectorize.enabled: ๋ฒกํฐํ๋ฅผ ํ์ฑํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ณ ํ ๋์ ๋ฐฐ์น๋ก ์ฒ๋ฆฌํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. `true`๋ก ์ค์ ํ์ญ์์ค.
- hive.vectorize.use.column.select.reordering: ๋ ๋์ ๋ฒกํฐํ ํจ์จ์ฑ์ ์ํด ์ปฌ๋ผ ์ ํ ์์๋ฅผ ์ฌ์ ๋ ฌํฉ๋๋ค. `true`๋ก ์ค์ ํ์ญ์์ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ:
- hive.tez.container.size: ๊ฐ Tez ์ปจํ ์ด๋์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ง์ ํฉ๋๋ค. ํด๋ฌ์คํฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ์ฟผ๋ฆฌ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ์ด ๊ฐ์ ์กฐ์ ํ์ญ์์ค. ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๋ก ์ธํด ์์ ์ด ์คํจํ๋ ๊ฒฝ์ฐ ์ด ๊ฐ์ ๋๋ฆฌ์ญ์์ค. `4096mb`๋ก ์์ํ์ฌ ํ์์ ๋ฐ๋ผ ๋๋ฆฌ์ญ์์ค.
- hive.tez.java.opts: Tez ์ปจํ ์ด๋์ JVM ์ต์ ์ ์ง์ ํฉ๋๋ค. `-Xmx` ๋ฐ `-Xms` ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ์ญ์์ค (์: `-Xmx3072m`).
- spark.executor.memory: (Spark๋ฅผ ์คํ ์์ง์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ๊ฐ Spark ์คํ๊ธฐ์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ธํธ ํฌ๊ธฐ์ Spark ๋ณํ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ์ด๋ฅผ ์ต์ ํํ์ญ์์ค.
- spark.driver.memory: (Spark๋ฅผ ์คํ ์์ง์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) Spark ๋๋ผ์ด๋ฒ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. ๋๋ผ์ด๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ด ๊ฐ์ ๋๋ฆฌ์ญ์์ค.
๋ณ๋ ฌ ์คํ:
- hive.exec.parallel: ๋ ๋ฆฝ์ ์ธ ์์ ์ ๋ณ๋ ฌ ์คํ์ ํ์ฑํํฉ๋๋ค. `true`๋ก ์ค์ ํ์ญ์์ค.
- hive.exec.parallel.thread.number: ๋ณ๋ ฌ ์คํ์ ์ฌ์ฉํ ์ค๋ ๋ ์๋ฅผ ์ง์ ํฉ๋๋ค. ํด๋ฌ์คํฐ์ CPU ์ฉ๋์ ๋ฐ๋ผ ์ด ๊ฐ์ ๋๋ฆฌ์ญ์์ค. ์ผ๋ฐ์ ์ธ ์์์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ์ด ์์ ๋๋ค.
- hive.tez.am.resource.memory.mb: Tez ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ(AM)์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. AM์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๊ด๋ จ ์ค๋ฅ๊ฐ ํ์๋๋ฉด ์ด ๊ฐ์ ๋๋ฆฌ์ญ์์ค.
- hive.tez.am.java.opts: Tez ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ์ Java ์ต์ ์ ์ง์ ํฉ๋๋ค. `-Xmx` ๋ฐ `-Xms`๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ์ญ์์ค.
ํ์ผ ํ์ ๋ฐ ์์ถ:
- ์ต์ ํ๋ ํ์ผ ํ์ ์ฌ์ฉ: ORC(Optimized Row Columnar) ๋๋ Parquet์ ๊ฐ์ ํ์ผ ํ์์ ์ฌ์ฉํ์ฌ ์์ถ ๋ฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค. ์ด๋ฌํ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ปฌ๋ผ ํ์์ผ๋ก ์ ์ฅํ์ฌ Hive๊ฐ ์ฟผ๋ฆฌ์ ํ์ํ ์ปฌ๋ผ๋ง ์ฝ์ ์ ์๋๋ก ํฉ๋๋ค.
- ์์ถ ํ์ฑํ: Snappy ๋๋ Gzip๊ณผ ๊ฐ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ์ค์ด๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค. Snappy๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋น ๋ฅด์ง๋ง Gzip์ ๋ ๋์ ์์ถ๋ฅ ์ ์ ๊ณตํฉ๋๋ค. ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ ๊ณ ๋ คํ์ญ์์ค. `STORED AS ORC TBLPROPERTIES ('orc.compress'='SNAPPY');`๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- hive.exec.compress.intermediate: ์ฟผ๋ฆฌ ์คํ ์ค์ ๋์คํฌ์ ๊ธฐ๋ก๋๋ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ถํฉ๋๋ค. `true`๋ก ์ค์ ํ๊ณ ์ ์ ํ ์์ถ ์ฝ๋ฑ์ ์ ํํ์ญ์์ค (์: `hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec`).
- hive.exec.compress.output: ์ฟผ๋ฆฌ์ ์ต์ข ์ถ๋ ฅ์ ์์ถํฉ๋๋ค. `true`๋ก ์ค์ ํ๊ณ ์ถ๋ ฅ ์์ถ ์ฝ๋ฑ์ ๊ตฌ์ฑํ์ญ์์ค.
์์ ๊ตฌ์ฑ ์ค๋ํซ (hive-site.xml):
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
<property>
<name>hive.optimize.cp</name>
<value>true</value>
</property>
<property>
<name>hive.vectorize.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.tez.container.size</name>
<value>4096mb</value>
</property>
<property>
<name>hive.exec.parallel</name>
<value>true</value>
</property>
์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ์
ํจ์จ์ ์ธ HiveQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๊ธฐ์ ์ ๋๋ค:
ํํฐ์ ๋(Partitioning):
ํํฐ์ ๋์ ํน์ ์ปฌ๋ผ(์: ๋ ์ง, ์ง์ญ)์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค. ์ด๋ฅผ ํตํด Hive๋ ๊ด๋ จ ํํฐ์ ๋ง ์ฟผ๋ฆฌํ์ฌ ์ค์บ๋๋ ๋ฐ์ดํฐ ์์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ์ง๋ฆฌ์ ์ง์ญ์ด๋ ์์ง ๋ ์ง๋ณ๋ก ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถํ ํ ์ ์๋ ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ *ํนํ* ์ค์ํฉ๋๋ค.
์์: ๋ ์ง๋ณ ํํฐ์ ๋
CREATE TABLE sales (
product_id INT,
sale_amount DOUBLE
) PARTITIONED BY (sale_date STRING)
STORED AS ORC;
ํน์ ๋ ์ง์ ํ๋งค๋์ ์ฟผ๋ฆฌํ ๋ Hive๋ ํด๋น ํํฐ์ ๋ง ์ฝ์ต๋๋ค:
SELECT * FROM sales WHERE sale_date = '2023-10-27';
๋ฒํทํ (Bucketing):
๋ฒํทํ ์ ํ๋ ์ด์์ ์ปฌ๋ผ์ ํด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ์์ ๋ฒํท์ผ๋ก ๋๋๋๋ค. ์ด๋ ๋ฒํทํ ๋ ์ปฌ๋ผ์์ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์์: ์ฌ์ฉ์ ID๋ณ ๋ฒํทํ
CREATE TABLE users (
user_id INT,
username STRING,
city STRING
) CLUSTERED BY (user_id) INTO 100 BUCKETS
STORED AS ORC;
user_id๋ก ๋ฒํทํ ๋ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ์ฌ์ฉ์๋ฅผ ์กฐ์ธํ ๋ Hive๋ ํด๋น ๋ฒํท๋ง ๋น๊ตํ์ฌ ํจ์จ์ ์ผ๋ก ์กฐ์ธ์ ์ํํ ์ ์์ต๋๋ค.
์กฐ์ธ ์ต์ ํ:
- MapJoin: ์กฐ์ธ๋๋ ํ ์ด๋ธ ์ค ํ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ ๋งํผ ์์ผ๋ฉด MapJoin์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ๋ง์ ํผํ์ญ์์ค. MapJoin์ ๋ ์์ ํ ์ด๋ธ์ ๋ชจ๋ ๋งคํผ ๋ ธ๋์ ๋ณต์ฌํ์ฌ ์กฐ์ธ์ด ๋ก์ปฌ์์ ์ํ๋๋๋ก ํฉ๋๋ค.
- Broadcast Join: MapJoin๊ณผ ์ ์ฌํ์ง๋ง Spark ์คํ ์์ง์ ๋ ์ ํฉํฉ๋๋ค. ๋ ์์ ํ ์ด๋ธ์ ๋ชจ๋ ์คํ๊ธฐ๋ก ๋ธ๋ก๋์บ์คํธํฉ๋๋ค.
- Bucket MapJoin: ๋ ํ ์ด๋ธ ๋ชจ๋ ์กฐ์ธ ํค์ ๋ํด ๋ฒํทํ ๋ ๊ฒฝ์ฐ ์ต์ ์ ์กฐ์ธ ์ฑ๋ฅ์ ์ํด Bucket MapJoin์ ์ฌ์ฉํ์ญ์์ค. ์ด๋ ์ ํ๋ง์ ํผํ๊ณ ๋ฒํท ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํฉ๋๋ค.
- ์นดํฐ์ ๊ณฑ(Cartesian Products) ํผํ๊ธฐ: ์กฐ์ธ์ ์ ์ ํ ์กฐ์ธ ์กฐ๊ฑด์ด ์๋์ง ํ์ธํ์ฌ ๊ทน๋๋ก ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ฐํ ์ ์๋ ์นดํฐ์ ๊ณฑ ์์ฑ์ ํผํ์ญ์์ค.
์์: MapJoin
SELECT /*+ MAPJOIN(small_table) */
big_table.column1,
small_table.column2
FROM big_table
JOIN small_table ON big_table.join_key = small_table.join_key;
์๋ธ์ฟผ๋ฆฌ ์ต์ ํ:
์๊ด ์๋ธ์ฟผ๋ฆฌ๋ ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ํผํ์ญ์์ค. ๊ฐ๋ฅํ๋ฉด ์กฐ์ธ์ด๋ ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ค์ ์์ฑํ์ญ์์ค. ๊ณตํต ํ ์ด๋ธ ํํ์(CTE)์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ต์ ํ๋ฅผ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์์: ์๊ด ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ธ์ผ๋ก ๋์ฒดํ๊ธฐ
๋นํจ์จ์ :
SELECT order_id,
(SELECT customer_name FROM customers WHERE customer_id = orders.customer_id)
FROM orders;
ํจ์จ์ :
SELECT orders.order_id,
customers.customer_name
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;
ํํฐ๋ง ๋ฐ ์ ์ด(Predicates):
- ์ ์ด ํธ์๋ค์ด(Push Down Predicates): ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ ์์ ์ค์ด๊ธฐ ์ํด ํํฐ๋ง ์กฐ๊ฑด(WHERE ์ )์ ์ฟผ๋ฆฌ์์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ฐฐ์นํ์ญ์์ค.
- ์ ์ ํ ๋ฐ์ดํฐ ํ์ ์ฌ์ฉ: ์ปฌ๋ผ์ ๊ฐ์ฅ ์ ํฉํ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ์ต์ํํ๊ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ด ์ ์ ๋ฒ์ ๋ด์ ์์ผ๋ฉด BIGINT ๋์ INT๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ ํ ์์ผ๋์นด๋๊ฐ ์๋ `LIKE` ์ฌ์ฉ ํผํ๊ธฐ: `LIKE '%value'`๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์์ผ๋ฉฐ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ์ด๋ํฉ๋๋ค.
์ง๊ณ ์ต์ ํ:
- ์ฌ๋ฌ ์ง๊ณ ๊ฒฐํฉ: ์ฌ๋ฌ ์ง๊ณ ์์ ์ ๋จ์ผ ์ฟผ๋ฆฌ๋ก ๊ฒฐํฉํ์ฌ MapReduce ์์ ์๋ฅผ ์ค์ด์ญ์์ค.
- APPROX_COUNT_DISTINCT ์ฌ์ฉ: ๊ทผ์ฌ์ ์ธ ๊ณ ์ ๊ฐ์ ๊ณ์ฐ์ ์ํด `COUNT(DISTINCT)`๋ณด๋ค ๋น ๋ฅธ `APPROX_COUNT_DISTINCT` ํจ์๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์์ ์ฟผ๋ฆฌ ์ต์ ํ ์๋๋ฆฌ์ค: ์ ์์๊ฑฐ๋ ํ๋งค ๋ถ์(๊ธ๋ก๋ฒ)
์ฌ๋ฌ ๊ตญ๊ฐ์ ์ง์ญ์ ๊ฑธ์น ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ ์ ์์๊ฑฐ๋ ํ์ฌ๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค. ํ๋งค ๋ฐ์ดํฐ๋ `global_sales`๋ผ๋ Hive ํ ์ด๋ธ์ ๋ค์ ์คํค๋ง๋ก ์ ์ฅ๋ฉ๋๋ค:
CREATE TABLE global_sales (
order_id INT,
product_id INT,
customer_id INT,
sale_amount DOUBLE,
country STRING,
region STRING,
sale_date STRING
)
PARTITIONED BY (country, sale_date)
STORED AS ORC TBLPROPERTIES ('orc.compress'='SNAPPY');
์ด ํ์ฌ๋ ํน์ ๊ตญ๊ฐ ๋ฐ ๋ ์ง์ ๋ํ ์ง์ญ๋ณ ์ด ํ๋งค ๊ธ์ก์ ๋ถ์ํ๊ณ ์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
SELECT region, SUM(sale_amount)
FROM global_sales
WHERE country = 'USA' AND sale_date = '2023-10-27'
GROUP BY region;
์ต์ ํ๋ ์ฟผ๋ฆฌ:
๋ค์๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค:
- ํํฐ์ ํ๋ฃจ๋: `PARTITIONED BY` ์ ์ ํตํด Hive๋ ์ง์ ๋ ๊ตญ๊ฐ ๋ฐ ๋ ์ง์ ํด๋นํ๋ ํํฐ์ ๋ง ์ฝ์ ์ ์์ต๋๋ค.
- ORC ํ์ ๋ฐ Snappy ์์ถ: Snappy ์์ถ์ ์ฌ์ฉํ๋ ORC ํ์์ ์ ์ฅ ๊ณต๊ฐ์ ์ค์ด๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์ ์ด ํธ์๋ค์ด: `WHERE` ์ ์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ด๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํฉ๋๋ค.
ํํฐ์ ๋ ๋ฐ ์ ์ฅ ํ์์ด ์ด๋ฏธ ์ต์ ํ๋์ด ์์ผ๋ฏ๋ก ์ต์ ํ๋ ์ฟผ๋ฆฌ๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํต๊ณ๊ฐ ์ต์ ์ํ์ธ์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค (์๋ ์ฐธ์กฐ).
๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐ ์ ์ง๋ณด์
Hive ๋ฐ์ดํฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ์ต์ ์ ์ฑ๋ฅ์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ ์ง ๊ด๋ฆฌ ์์ ์ ํตํด ๋ฐ์ดํฐ๊ฐ ๊นจ๋ํ๊ณ ์ผ๊ด๋๋ฉฐ ์ ๋๋ก ๊ตฌ์ฑ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
ํต๊ณ ์์ง:
Hive๋ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ต์ ํํ๊ธฐ ์ํด ํต๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค. `ANALYZE TABLE` ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ๋ํ ํต๊ณ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์์งํ์ญ์์ค.
์์: ํต๊ณ ์์ง
ANALYZE TABLE global_sales COMPUTE STATISTICS FOR ALL COLUMNS;
๋ฐ์ดํฐ ์์ถ(Compaction):
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ HDFS์ ์์ ํ์ผ์ด ์ถ์ ๋์ด ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. `ALTER TABLE ... CONCATENATE` ๋ช ๋ น์ ์ฌ์ฉํ๊ฑฐ๋ ํ์ผ์ ๋ณํฉํ๋ MapReduce ์์ ์ ์์ฑํ์ฌ ์์ ํ์ผ์ ๋ ํฐ ํ์ผ๋ก ์ ๊ธฐ์ ์ผ๋ก ์์ถํ์ญ์์ค. ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์์ค์์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ ๋ ํนํ ์ค์ํฉ๋๋ค.
๋ฐ์ดํฐ ์์นด์ด๋น:
์ค๋๋๊ฑฐ๋ ์์ฃผ ์ก์ธ์คํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์์นด์ด๋นํ์ฌ ํ์ฑ ๋ฐ์ดํฐ ์ธํธ์ ํฌ๊ธฐ๋ฅผ ์ค์ด์ญ์์ค. ๋ฐ์ดํฐ๋ฅผ Amazon S3 Glacier ๋๋ Azure Archive Storage์ ๊ฐ์ ์ ๋ ดํ ์คํ ๋ฆฌ์ง ๊ณ์ธต์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ฒ์ฆ:
๋ฐ์ดํฐ ํ์ง๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ์ญ์์ค. Hive UDF(์ฌ์ฉ์ ์ ์ ํจ์) ๋๋ ์ธ๋ถ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ง ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ์ญ์์ค.
๋ชจ๋ํฐ๋ง ๋ฐ ๋ฌธ์ ํด๊ฒฐ
Hive์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ค์ ๋๊ตฌ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ Hive ๋ฐฐํฌ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค:
Hive ๋ก๊ทธ:
์ค๋ฅ, ๊ฒฝ๊ณ ๋ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ฐพ๊ธฐ ์ํด Hive์ ๋ก๊ทธ๋ฅผ ๊ฒ์ฌํ์ญ์์ค. ๋ก๊ทธ๋ ์ฟผ๋ฆฌ ์คํ, ๋ฆฌ์์ค ํ์ฉ๋ ๋ฐ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๋ํ ๊ท์คํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ก ๋ชจ๋ํฐ๋ง ๋๊ตฌ:
ํ๋ก ์น UI, Ambari ๋๋ Cloudera Manager์ ๊ฐ์ ํ๋ก ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก ํด๋ฌ์คํฐ์ ์ ๋ฐ์ ์ธ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ญ์์ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ฆฌ์์ค ํ์ฉ๋, ๋ ธ๋ ์ํ ๋ฐ ์์ ์ฑ๋ฅ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฟผ๋ฆฌ ํ๋กํ์ผ๋ง:
Hive์ ์ฟผ๋ฆฌ ํ๋กํ์ผ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ๋ถ์ํ์ญ์์ค. ์ด๋ฅผ ํตํด ๋๋ฆฐ ๋จ๊ณ๋ฅผ ์๋ณํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค. `hive.profiler.enabled=true`๋ฅผ ์ค์ ํ๊ณ ์ถ๋ ฅ์ ๋ถ์ํ์ญ์์ค.
๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง:
ํ๋ก ๋ ธ๋์ CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋์คํฌ I/O ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ์ญ์์ค. `top`, `vmstat`, `iostat`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ๋ณ๋ชฉ ํ์์ ์๋ณํ์ญ์์ค.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ ์๋๋ฆฌ์ค:
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ(Out of Memory Errors): Hive ์ปจํ ์ด๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆฌ์ญ์์ค.
- ๋๋ฆฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ: ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ๋ถ์ํ๊ณ , ํต๊ณ๋ฅผ ์์งํ๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ์ญ์์ค.
- ๋ฐ์ดํฐ ์คํ: salting ๋๋ ๋ฒํทํ ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์คํ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค.
- ์์ ํ์ผ ๋ฌธ์ : ์์ ํ์ผ์ ๋ ํฐ ํ์ผ๋ก ์์ถํ์ญ์์ค.
ํ์ ๋ฐ ๊ธ๋ก๋ฒ ํ ๊ณ ๋ ค ์ฌํญ
๊ธ๋ก๋ฒ ํ๊ณผ ํ๋ ฅํ ๋ Hive ์์ฐ์ฑ์ ์ต์ ํํ๋ ค๋ฉด ํ์ ๊ณผ ์ปค๋ฎค๋์ผ์ด์ ์ด ํ์์ ์ ๋๋ค.
ํ์คํ๋ ๊ตฌ์ฑ:
๋ชจ๋ ํ ๊ตฌ์ฑ์์ด ํ์คํ๋ Hive ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋ถ์ผ์น ๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋๋ก ํ์ญ์์ค. Ansible ๋๋ Chef์ ๊ฐ์ ๊ตฌ์ฑ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Hive ๊ตฌ์ฑ์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์๋ํํ์ญ์์ค.
์ฝ๋ ๋ฆฌ๋ทฐ:
HiveQL ์ฟผ๋ฆฌ๊ฐ ์ ์์ฑ๋๊ณ ํจ์จ์ ์ด๋ฉฐ ์ฝ๋ฉ ํ์ค์ ์ค์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ์ญ์์ค. Git๊ณผ ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ฌ์ฉํ์ฌ Hive ์คํฌ๋ฆฝํธ ๋ฐ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ์ญ์์ค.
์ง์ ๊ณต์ :
๋ฌธ์, ๊ต์ก ์ธ์ ๋ฐ ์จ๋ผ์ธ ํฌ๋ผ์ ํตํด ํ์ ๊ฐ์ ์ง์ ๊ณต์ ๋ฅผ ์ฅ๋ คํ์ญ์์ค. Hive ์คํฌ๋ฆฝํธ, ๊ตฌ์ฑ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ํ ์ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋์ญ์์ค.
์๊ฐ๋ ์ธ์:
์๊ฐ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋๋ ์๊ฐ๋๋ฅผ ์ผ๋์ ๋์ญ์์ค. ๋ชจ๋ ํ์์คํฌํ๋ฅผ UTC๋ก ์ ์ฅํ๊ณ ๋ณด๊ณ ๋ฐ ๋ถ์์ ์ํด ์ ์ ํ ์๊ฐ๋๋ก ๋ณํํ์ญ์์ค. Hive UDF ๋๋ ์ธ๋ถ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ๋ ๋ณํ์ ์ฒ๋ฆฌํ์ญ์์ค.
๋ฐ์ดํฐ ๊ฑฐ๋ฒ๋์ค:
๋ฐ์ดํฐ ํ์ง, ๋ณด์ ๋ฐ ๊ท์ ์ค์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๋ช ํํ ๋ฐ์ดํฐ ๊ฑฐ๋ฒ๋์ค ์ ์ฑ ์ ์๋ฆฝํ์ญ์์ค. ๋ฐ์ดํฐ ์์ ๊ถ, ์ ๊ทผ ์ ์ด ๋ฐ ๋ฐ์ดํฐ ๋ณด์กด ์ ์ฑ ์ ์ ์ํ์ญ์์ค.
๋ฌธํ์ ๊ฐ์์ฑ:
๊ธ๋ก๋ฒ ํ๊ณผ ํ๋ ฅํ ๋ ๋ฌธํ์ ์ฐจ์ด๋ฅผ ์ธ์ํ์ญ์์ค. ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ , ์ ๋ฌธ ์ฉ์ด๋ฅผ ํผํ๋ฉฐ, ๋ค์ํ ์ปค๋ฎค๋์ผ์ด์ ์คํ์ผ์ ์กด์คํ์ญ์์ค.
์์: ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์น ํ๋งค ๋ฐ์ดํฐ ๋ถ์ ์ต์ ํ
์ฌ๋ฌ ์ง์ญ(๋ถ๋ฏธ, ์ ๋ฝ, ์์์)์ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ ๊ธ๋ก๋ฒ ์๋งค ํ์ฌ๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค. ์ด ํ์ฌ๋ ๊ฐ ์ง์ญ์ ์ ํ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ด ํ๋งค ๊ธ์ก์ ๋ถ์ํ๊ณ ์ ํฉ๋๋ค.
๊ณผ์ :
- ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ํ์๊ณผ ์์น์ ์ ์ฅ๋ฉ๋๋ค.
- ์ง์ญ๋ง๋ค ์๊ฐ๋๊ฐ ๋ค๋ฆ ๋๋ค.
- ์ผ๋ถ ์ง์ญ์๋ ๋ฐ์ดํฐ ํ์ง ๋ฌธ์ ๊ฐ ์กด์ฌํฉ๋๋ค.
ํด๊ฒฐ์ฑ :
- ๋ฐ์ดํฐ ํ์ ํ์คํ: ๋ชจ๋ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๊ณตํต ํ์(์: ORC)์ผ๋ก ๋ณํํ๊ณ ์ค์ ๋ฐ์ดํฐ ๋ ์ดํฌ์ ์ ์ฅํฉ๋๋ค.
- ์๊ฐ๋ ์ฒ๋ฆฌ: ๋ฐ์ดํฐ ์์ง ์ค์ ๋ชจ๋ ํ์์คํฌํ๋ฅผ UTC๋ก ๋ณํํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ตฌํ: ๋ฐ์ดํฐ ํ์ง ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์์ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ฒ์ฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
- ํํฐ์ ๋ ๋ฐ ๋ฒํทํ ์ฌ์ฉ: ํ๋งค ๋ฐ์ดํฐ๋ฅผ ์ง์ญ ๋ฐ ๋ ์ง๋ณ๋ก ํํฐ์ ๋ํ๊ณ ์ ํ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ฒํทํ ํฉ๋๋ค.
- ์ฟผ๋ฆฌ ์ต์ ํ: MapJoin ๋๋ Bucket MapJoin์ ์ฌ์ฉํ์ฌ ํ๋งค ๋ฐ์ดํฐ์ ์ ํ ์นดํ ๊ณ ๋ฆฌ ๋ฐ์ดํฐ ๊ฐ์ ์กฐ์ธ ์์ ์ ์ต์ ํํฉ๋๋ค.
Hive ์ต์ ํ์ ์๋ก์ด ๋ํฅ
๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ๋ค์์ Hive ์ต์ ํ์ ๋ช ๊ฐ์ง ์๋ก์ด ๋ํฅ์ ๋๋ค:
ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ Hive:
AWS, Azure, GCP์ ๊ฐ์ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ Hive๋ฅผ ์คํํ๋ฉด ํ์ฅ์ฑ, ํ๋ ฅ์ฑ ๋ฐ ๋น์ฉ ์ ๊ฐ์ ํฌํจํ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ Hive ๋ฐฐํฌ๋ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง(์: Amazon S3, Azure Blob Storage) ๋ฐ ๊ด๋ฆฌํ ํ๋ก ์๋น์ค(์: Amazon EMR, Azure HDInsight)์ ๊ฐ์ ํด๋ผ์ฐ๋๋ณ ๊ธฐ๋ฅ์ ํ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ ์ดํฌ์์ ํตํฉ:
Hive๋ ์์, ๋น์ ํ ๋ฐ์ดํฐ์ ์ค์ ๋ฆฌํฌ์งํ ๋ฆฌ์ธ ๋ฐ์ดํฐ ๋ ์ดํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ๋ฐ ์ ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ๋ค์ํ ํ์(์: Parquet, Avro, JSON)์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ ์ ์๋ Hive์ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ๋ ์ดํฌ ํ๊ฒฝ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
Apache Druid๋ฅผ ์ฌ์ฉํ ์ค์๊ฐ ์ฟผ๋ฆฌ:
์ค์๊ฐ ์ฟผ๋ฆฌ ๋ฐ ๋ถ์์ ์ํด Hive๋ ๊ณ ์ฑ๋ฅ, ์ปฌ๋ผ ์งํฅ ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์์ธ Apache Druid์ ํตํฉ๋ ์ ์์ต๋๋ค. Druid๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ ์ฟผ๋ฆฌํ ์ ์์ผ๋ฉฐ, Hive๋ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ์ ๋ํ ๋ฐฐ์น ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
AI ๊ธฐ๋ฐ ์ต์ ํ:
AI ๋ฐ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ด Hive ์ต์ ํ๋ฅผ ์๋ํํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ Hive ๊ตฌ์ฑ์ ์๋์ผ๋ก ์กฐ์ ํ๊ณ , ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ต์ ํํ๋ฉฐ, ๋ฐ์ดํฐ ์คํ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Hive ์์ฐ์ฑ์ ์ต์ ํํ๋ ๊ฒ์ Hive์ ์ํคํ ์ฒ, ๊ตฌ์ฑ ๋ฐ ์ฟผ๋ฆฌ ์คํ์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๊ธฐ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๊ธ๋ก๋ฒ ํ์ Hive์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๊ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ, ๋ฆฌ์์ค ํ์ฉ๋ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์จ์ฑ์์ ์๋นํ ๊ฐ์ ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๋ณํํ๋ ๋ฐ์ดํฐ ๋ณผ๋ฅจ, ์ฟผ๋ฆฌ ํจํด ๋ฐ ๊ธฐ์ ๋ฐ์ ์ ์ ์ํ๊ธฐ ์ํด Hive ๋ฐฐํฌ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๋ฏธ์ธ ์กฐ์ ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ํ์ ๊ฐ์ ํจ๊ณผ์ ์ธ ํ์ ๊ณผ ์ง์ ๊ณต์ ๋ํ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ Hive ์์ฐ์ฑ์ ๊ทน๋ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.